Lockers doors

[info] 思路1

题目的大意是给定n个门,从1开始遍历到n,设当前第i次遍历,那么每个i个门就进行操作 若门是关闭的就打开门,若门是打开的就关闭门。 不妨设一个长度为n的boolean数组,用true和false表示开闭 从1循环到n,每次对门的处理就取反 最后遍历门数组就得到值为true就是打开门的个数

代码实现

#include<stdio.h>

int  main() {
    int n,opendoors = 0;
    scanf("%d",&n);
    bool doors[n];
    for(int index = 0; index<n; index++) {
        doors[index] = 1;
    }
    for(int i =2; i<=n; i++) {
        for(int j = i; j<=n; j+=i) {
            doors[j-1] = !doors[j -1];
        }
    }
    for(int index = 0; index<n; index++) {
        if(doors[index] == 1) {
            opendoors ++;
        }
    }
    printf("%d\n",opendoors);
    return 0;
}

模拟程序

[info] 思路2

根据模拟程序,会发现打开门的数量sqrt(n)

results matching ""

    No results matching ""